/**
 * @param {number[]} prices
 * @return {number}
 */
 var maxProfit = function(prices) {
  if(prices.length < 2) {
    return 0
  } else if(prices.length < 3) {
    return Math.max(0, prices[1] - prices[0]);
  }
  let dp = new Array(prices.length).fill(0).map(()=>new Array(4).fill(0))
  // 有四个状态 0 买入股票状态 1.卖出股票状态(两天前已经卖出了股票保持卖出过状态) 2.今天卖出股票 3.冷冻期
  // 初始化 
  dp[0][0] = -prices[0]
  for(let i = 1;i < prices.length;i++){
    dp[i][0] = Math.max(dp[i-1][0],Math.max(dp[i-1][1]-prices[i],dp[i-1][3]-prices[i])) // 要达到买入股票状态 前一天需是买入股票状态 或者前一天就已经是买入股票状态 前一天是冷冻期今天买入
    dp[i][1] = Math.max(dp[i-1][1],dp[i-1][3]) // 卖出股票状态(两天前已经是卖出股票状态) 两天前就卖出了股票今天保持 前天是卖出股票状态
    dp[i][2] = dp[i-1][0] + prices[i] // 今天卖出股票
    dp[i][3] = dp[i-1][2] //冷冻期 只有前一天是卖出股票状态才是冷冻期
  }
  return Math.max(dp[prices.length-1][1],dp[prices.length-1][2],dp[prices.length-1][3])
};